Java配置和表单登录

你可能会想知道系统提示您登录时登录表单从哪里来的,因为我们都没有提供任何的HTML或JSP文件。由于Spring Security的默认配置并没有明确设定一个登录页面的URL,Spring Security自动生成一个,基于这个功能被启用,使用默认URL处理登录的提交内容,登录后跳转的URL等等。

自动生成的登录页面可以方便应用的快速启动和运行,大多数应用程序都需要提供自己的登录页面。要做到这一点,我们可以更新我们的配置,如下所示:

  1. protected void configure(HttpSecurity http) throws Exception {
  2. http
  3. .authorizeRequests()
  4. .anyRequest().authenticated()
  5. .and()
  6. .formLogin()
  7. .loginPage("/login") //注1
  8. .permitAll(); //注2
  9. }
  1. 指定登陆页的路径
  2. 我们必须允许所有用户访问我们的登录页 (例如未验证的用户) ,这个formLogin().permitAll() 方法允许基于表单登录的所有URL的所有用户的访问。

一个我们当前配置使用的JSP实现的页面如下:

下面这个登陆页是我们的当前配置,如果不符合我们的要求我们可以很容易的更新我们的配置。

  1. <c:url value="/login" var="loginUrl"/>
  2. <form action="${loginUrl}" method="post"> <!-- 1 -->
  3. <c:if test="${param.error != null}"> <!-- 2 -->
  4. <p>
  5. Invalid username and password.
  6. </p>
  7. </c:if>
  8. <c:if test="${param.logout != null}"> <!-- 3 -->
  9. <p>
  10. You have been logged out.
  11. </p>
  12. </c:if>
  13. <p>
  14. <label for="username">Username</label>
  15. <input type="text" id="username" name="username"/><!-- 4 -->
  16. </p>
  17. <p>
  18. <label for="password">Password</label>
  19. <input type="password" id="password" name="password"/><!-- 5 --> </p>
  20. <input type="hidden"
  21. name="${_csrf.parameterName}"
  22. value="${_csrf.token}"/><!-- 6 -->
  23. <button type="submit" class="btn">Log in</button>
  24. </form>
  1. 一个POST请求到/login用来验证用户
  2. 如果参数有错误,验证尝试失败
  3. 如果请求参数logout存在则登出
  4. 登录名参数必须被命名为username
  5. 密码参数必须被命名为password
  6. CSRF参数,了解更多查阅 后续“包含CSRF Token” 和 “跨站请求伪造(CSRF)”相关章节